<?php
/**
 * @author Mr.UBKey
 * @package XPHP
 * @version Beta
 * @copyright XWEB
 */
class XPHP_Model_Validation
{
	/**
	 * Mảng chứa các thông báo lỗi
	 * @var unknown_type
	 */
	public $errorMessage = array();
	
	
	public function __construct()
	{
	
	}
	
	/**
	 * Phương thức kiểm tra tính bắt buộc
	 * @param string $validate Chuỗi kiểm tra và thông báo lỗi
	 * @param string $value Giá trị cần kiểm tra
	 */
	public function required($validate, $value)
	{
		$arrValid = explode(",", $validate);
		if(trim($arrValid[0]) == "true" && strlen($value) == 0)
		{
			if(isset($arrValid[1]))
				$this->errorMessage['required'] = trim($arrValid[1]); 
			else
				$this->errorMessage['required'] = "This field is required";
			return false;
		}
		return true;
	}

	/**
	 * Phương thức kiểm tra độ dài tối thiểu của chuỗi
	 * @param string $validate Chuỗi kiểm tra và thông báo lỗi
	 * @param string $value Giá trị cần kiểm tra
	 */
	public function minlength($validate, $value)
	{
		$arrValid = explode(",", $validate);
		$minlength = (int)$arrValid[0];
		if(strlen($value) < $minlength)
		{
			if(isset($arrValid[1]))
				$this->errorMessage['minlength'] = trim($arrValid[1]); 
			else
				$this->errorMessage['minlength'] = "This field minlength " . $arrValid[0];
			return false;
		}
		return true;
	}

	/**
	 * Phương thức kiểm tra độ dài tối đa
	 * @param string $validate Chuỗi kiểm tra và thông báo lỗi
	 * @param string $value Giá trị cần kiểm tra
	 */
	public function maxlength($validate, $value)
	{
		$arrValid = explode(",", $validate);
		$maxlength = (int)$arrValid[0];
		if(strlen($value) > $maxlength)
		{
			if(isset($arrValid[1]))
				$this->errorMessage['maxlength'] = trim($arrValid[1]); 
			else
				$this->errorMessage['maxlength'] = "This field maxlength " . $arrValid[0];
			return false;
		}
		return true;
	}
	
	/**
	 * Phương thức kiểm tra khoảng độ dài
	 * @param string $validate Chuỗi kiểm tra và thông báo lỗi
	 * @param string $value Giá trị cần kiểm tra
	 */
	public function rangelength($validate, $value)
	{
		$arrValid = explode(",", $validate);
		$range = explode("-", $arrValid[0]);
		$minlength = (int)$range[0];
		$maxlength = (int)$range[1];
		if(strlen($value) > $maxlength || strlen($value) < $minlength)
		{
			if(isset($arrValid[1]))
				$this->errorMessage['rangelength'] = trim($arrValid[1]); 
			else
				$this->errorMessage['rangelength'] = "This field minlength $minlength maxlength $maxlength";
			return false;
		}
		return true;	
	}
	
	/**
	 * Phương thức kiểm tra giá trị nhỏ nhất
	 * @param string $validate Chuỗi kiểm tra và thông báo lỗi
	 * @param string $value Giá trị cần kiểm tra
	 */
	public function min($validate, $value)
	{
		$arrValid = explode(",", $validate);
		$min = (int)$arrValid[0];
		$value = (int)$value;
		if($value < $min)
		{
			if(isset($arrValid[1]))
				$this->errorMessage['min'] = trim($arrValid[1]); 
			else
				$this->errorMessage['min'] = "This field min $min";
			return false;
		}
		return true;
	}
	
	/**
	 * Phương thức kiểm tra giá trị lớn nhất
	 * @param string $validate Chuỗi kiểm tra và thông báo lỗi
	 * @param string $value Giá trị cần kiểm tra
	 */
	public function max($validate, $value)
	{
		$arrValid = explode(",", $validate);
		$max = (int)$arrValid[0];
		$value = (int)$value;
		if($value > $max)
		{
			if(isset($arrValid[1]))
				$this->errorMessage['max'] = trim($arrValid[1]); 
			else
				$this->errorMessage['max'] = "This field max $max";
			return false;
		}
		return true;
	}
	
	/**
	 * Phương thức kiểm tra giá trị lớn nhất và nhỏ nhất
	 * @param string $validate Chuỗi kiểm tra và thông báo lỗi
	 * @param string $value Giá trị cần kiểm tra
	 */
	public function range($validate, $value)
	{
		$arrValid = explode(",", $validate);
		$range = explode("-", $arrValid[0]);
		$min = (int)$range[0];
		$max = (int)$range[1];
		$value = (int)$value;
		if($value > $max || $value < $min)
		{
			if(isset($arrValid[1]))
				$this->errorMessage['range'] = trim($arrValid[1]); 
			else
				$this->errorMessage['range'] = "This field min $min max $max";
			return false;
		}
		return true;	
	}
	
	/**
	 * Phương thức kiểm tra tính chính xác của email
	 * @param string $validate Chuỗi kiểm tra và thông báo lỗi
	 * @param string $value Giá trị cần kiểm tra
	 */
	public function email($validate, $value)
	{
		$arrValid = explode(",", $validate);
		if(trim($arrValid[0]) == "true" && 
		   ! eregi('^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$', $value))
		{
			if(isset($arrValid[1]))
				$this->errorMessage['email'] = trim($arrValid[1]); 
			else
				$this->errorMessage['email'] = "Email is invalid";
			return false;
		}
		return true;
	}
	
	/**
	 * Phương thức kiểm tra tính chính xác của URL
	 * @param string $validate Chuỗi kiểm tra và thông báo lỗi
	 * @param string $value Giá trị cần kiểm tra
	 */
	public function url($validate, $value)
	{
		$urlregex = '^(https?|ftp)\:\/\/([a-z0-9+!*(),;?&=\$_.-]+(\:[a-z0-9+!*(),;?&=\$_.-]+)?@)?[a-z0-9+\$_-]+(\.[a-z0-9+\$_-]+)*(\:[0-9]{2,5})?(\/([a-z0-9+\$_-]\.?)+)*\/?(\?[a-z+&\$_.-][a-z0-9;:@/&%=+\$_.-]*)?(#[a-z_.-][a-z0-9+\$_.-]*)?\$';
		$arrValid = explode(",", $validate);
		if(trim($arrValid[0]) == "true" && !eregi($urlregex, $value))
		{
			if(isset($arrValid[1]))
				$this->errorMessage['url'] = trim($arrValid[1]); 
			else
				$this->errorMessage['url'] = "Url is invalid";
			return false;
		}
		return true;
	}
	
	public function date()
	{}
	
	public function dateISO()
	{}
	
	public function dateDE()
	{}
	
	public function number()
	{}
	
	public function numberDE()
	{}
	
	public function digits()
	{}
	
	public function creditcard()
	{}
	
	public function accept()
	{}
	
	public function equalTo()
	{}
}